package br.com.sisgerenciamento.model.recebimento;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sisgerenciamento.dto.recebimento.RecebimentoDTO;
import br.com.sisgerenciamento.model.pedido.PedidoVO;
import br.com.sisgerenciamento.model.usuario.UsuarioVO;

@Entity
@Table(name = "recebimento")
public class RecebimentoVO {

	@Id
	@GeneratedValue
	private Long codigo;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataHoraRecebimento;
	
	@Enumerated(EnumType.ORDINAL)
	private FormaPagamentoEnum forma;
	
	private BigDecimal valor;
	
	@Column(name="pendente", nullable=false)
	private Boolean pendente;
	
	@ManyToOne(fetch =  FetchType.EAGER)
	@JoinColumn(name = "usuario")
	private UsuarioVO usuario;
	
	@ManyToOne(cascade=CascadeType.REFRESH, fetch = FetchType.LAZY)
	@JoinColumn(name = "pedido_id", nullable = true)
	private PedidoVO pedido;

	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Date getDataHoraRecebimento() {
		return dataHoraRecebimento;
	}
	public void setDataHoraRecebimento(Date dataHoraRecebimento) {
		this.dataHoraRecebimento = dataHoraRecebimento;
	}
	public FormaPagamentoEnum getForma() {
		return forma;
	}
	public void setForma(FormaPagamentoEnum forma) {
		this.forma = forma;
	}
	public BigDecimal getValor() {
		return valor;
	}
	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}
	public UsuarioVO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioVO usuario) {
		this.usuario = usuario;
	}
	public PedidoVO getPedido() {
		return pedido;
	}
	public void setPedido(PedidoVO pedido) {
		this.pedido = pedido;
	}
	public Boolean getPendente() {
		return pendente;
	}
	public void setPendente(Boolean pendente) {
		this.pendente = pendente;
	}
	public RecebimentoDTO getDTO(){
		RecebimentoDTO recebimento = new RecebimentoDTO();
		recebimento.setCodigo(getCodigo());
		recebimento.setDataHoraRecebimento(getDataHoraRecebimento());
		recebimento.setForma(getForma() != null ? getForma().getValor() : null);
		if(getUsuario() != null){
			recebimento.setUsuario(getUsuario().getDTO());
		}
		recebimento.setValor(getValor());
		recebimento.setPendente(getPendente());
		
		return recebimento;
	}
	
	
}
